OT: Sql command pro vyber pomoci AND.
Otázka od: David Michal
4. 9. 2002 17:42
Zdravim,
Potreboval bych asi takovyto SQL select:
Select * From Table1 Where (Cena = 100) and (Cena = 200)
Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva zaznamy jeden by
mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
napriklad druhy zaznam bude mit cena=300, pak mi select nevrati ani jeden
zaznam. Ale jak to zapsat?
Urcite jste jiz nekdo neco podobneho resil, poradite prosim?
Diky,
David
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.384 / Virus Database: 216 - Release Date: 21/08/2002
Odpovedá: Ing. Pavel Žilinec
5. 9. 2002 6:52
A co treba dotaz predtim?
Select @Pocet = count(*) From Table1 Where (Cena = 100) and (Cena = 200)
if @Pocet = 2
Select * From Table1 Where (Cena = 100) and (Cena = 200)
Nebo to dat do pomocne tabulky a pak to otestovat (aby se nemusel
provadet vyber nad pripadne velkou tabulkou dvakrat)
--------
ing. Pavel Zilinec
MailTo:zilinec@email.cz
Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju
DM> Potreboval bych asi takovyto SQL select:
DM> Select * From Table1 Where (Cena = 100) and (Cena = 200)
DM> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
DM> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva zaznamy jeden by
DM> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
DM> napriklad druhy zaznam bude mit cena=300, pak mi select nevrati ani jeden
DM> zaznam. Ale jak to zapsat?
Odpovedá: Tom Beran
5. 9. 2002 18:44
>DM> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
>DM> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
>DM> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva zaznamy jeden by
>DM> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
>DM> napriklad druhy zaznam bude mit cena=300, pak mi select nevrati ani jeden
Select * From Table1
WHERE ((Cena = 100) AND EXISTS (SELECT * FROM Table1 WHERE Cena = 200))
OR ((Cena = 200) AND EXISTS (SELECT * FROM Table1 WHERE Cena = 100))
T.
Odpovedá: Lstiburek Pavel
5. 9. 2002 12:12
Teorie logiky mi nejak vtirave stale naznacuje ze tyt SQL dotazy VZDY
nevrati NIC.
V jednom okamziku byva ve sloupci pouze jedna hodnota !
Neni mi jasne co to ma byt vysledkem ?
Pokud vsechny zaznamy kde Cena = 100 nebo Cena = 200
----------------------------------------------------------------------------
----------
Select * From Table1 Where (Cena = 100) OR (Cena = 200)
Pokud to ma vratit bud DVA nebo NIC tak
---------------------------------------------------------
Select @Pocet = count(*) From Table1 Where (Cena = 100) OR (Cena = 200)
if @Pocet = 2
Select * From Table1 Where (Cena = 100) OR (Cena = 200)
else
SELECT * From Table1 Where PK = NULL
Pavel
> Od: zilinec@email.cz [mailto:zilinec@email.cz]
>
> A co treba dotaz predtim?
>
> Select @Pocet = count(*) From Table1 Where (Cena = 100) and
> (Cena = 200)
> if @Pocet = 2
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
> Nebo to dat do pomocne tabulky a pak to otestovat (aby se nemusel
> provadet vyber nad pripadne velkou tabulkou dvakrat)
> --------
> ing. Pavel Zilinec
> MailTo:zilinec@email.cz
>
> Prog-Soft s.r.o. Plzen
> Informacni system pro vyrobce
> a distributory napoju
>
> DM> Potreboval bych asi takovyto SQL select:
>
> DM> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> DM> Takto to samozrejme nevrati nic. Ale nemohu prijit na to
> jak definovat
> DM> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> zaznamy jeden by
> DM> mel cena=100 a druhy cena=200 vratil by mi select oba
> dva. Pokud vsak
> DM> napriklad druhy zaznam bude mit cena=300, pak mi select
> nevrati ani jeden
> DM> zaznam. Ale jak to zapsat?
>
Odpovedá: Lstiburek Pavel
6. 9. 2002 1:53
Teorie logiky mi nejak vtirave stale naznacuje ze tyt SQL dotazy VZDY
nevrati NIC.
V jednom okamziku byva ve sloupci pouze jedna hodnota !
Neni mi jasne co to ma byt vysledkem ?
Pokud vsechny zaznamy kde Cena = 100 nebo Cena = 200
----------------------------------------------------------------------------
----------
Select * From Table1 Where (Cena = 100) OR (Cena = 200)
Pokud to ma vratit bud DVA nebo NIC tak
---------------------------------------------------------
Select @Pocet = count(*) From Table1 Where (Cena = 100) OR (Cena = 200)
if @Pocet = 2
Select * From Table1 Where (Cena = 100) OR (Cena = 200)
else
SELECT * From Table1 Where PK = NULL
Pavel
> Od: zilinec@email.cz [mailto:zilinec@email.cz]
>
> A co treba dotaz predtim?
>
> Select @Pocet = count(*) From Table1 Where (Cena = 100) and
> (Cena = 200)
> if @Pocet = 2
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
> Nebo to dat do pomocne tabulky a pak to otestovat (aby se nemusel
> provadet vyber nad pripadne velkou tabulkou dvakrat)
> --------
> ing. Pavel Zilinec
> MailTo:zilinec@email.cz
>
> Prog-Soft s.r.o. Plzen
> Informacni system pro vyrobce
> a distributory napoju
>
> DM> Potreboval bych asi takovyto SQL select:
>
> DM> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> DM> Takto to samozrejme nevrati nic. Ale nemohu prijit na to
> jak definovat
> DM> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> zaznamy jeden by
> DM> mel cena=100 a druhy cena=200 vratil by mi select oba
> dva. Pokud vsak
> DM> napriklad druhy zaznam bude mit cena=300, pak mi select
> nevrati ani jeden
> DM> zaznam. Ale jak to zapsat?
>
Odpovedá: Ben, Martin (CAP, GCF)
4. 9. 2002 17:00
Co to zkusit takto:
Select * From Table1 Where (Cena = 100) OR (Cena = 200)
Martin Ben
> -----Original Message-----
> From: David Michal [mailto:david.michal@www-bv.com]
>
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> zaznamy jeden by
> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
> napriklad druhy zaznam bude mit cena=300, pak mi select
> nevrati ani jeden
> zaznam. Ale jak to zapsat?
Odpovedá: David Michal
4. 9. 2002 18:08
Pomoci tohoto selectu dostanu vysledek 1 radku i v pripade ze napr. nenajde
zadny row s cena=200. Ale ja potrebuji aby mi vratil vysledek pouze v
pripade, za najde rows jak s cena=100 tak s cena=200.
David
Co to zkusit takto:
Select * From Table1 Where (Cena = 100) OR (Cena = 200)
Martin Ben
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.384 / Virus Database: 216 - Release Date: 21/08/2002
Odpovedá: Martin Cajbik
4. 9. 2002 20:56
Sice nechapem naco by to mohlo sluzit ale dalo by sa to napisat takto
Select * From Table1 Where ((Cena = 100) OR (Cena = 200))
AND EXISTS(SELECT * FROM Table1 Where Cena = 100)
AND EXISTS(SELECT * FROM Table1 Where Cena = 200)
MarCaNT (marcant@sct.sk)
> Pomoci tohoto selectu dostanu vysledek 1 radku i v pripade ze napr.
nenajde
> zadny row s cena=200. Ale ja potrebuji aby mi vratil vysledek pouze v
> pripade, za najde rows jak s cena=100 tak s cena=200.
> David
>
>
> Co to zkusit takto:
>
> Select * From Table1 Where (Cena = 100) OR (Cena = 200)
>
>
> Martin Ben
>
Odpovedá: Létal Integrodat
5. 9. 2002 0:24
Nevim, zda to lze vyresit SQL selectem,
ale urcite musis zaridit, aby se v pripade
NOT (Cena in [100,200])
vynuloval pripadny vysledek selectu.
mil
----- Original Message -----
From: "David Michal" <david.michal@www-bv.com>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, September 04, 2002 4:40 PM
Subject: OT: Sql command pro vyber pomoci AND.
> Zdravim,
> Potreboval bych asi takovyto SQL select:
>
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva zaznamy jeden by
> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
> napriklad druhy zaznam bude mit cena=300, pak mi select nevrati ani jeden
> zaznam. Ale jak to zapsat?
>
> Urcite jste jiz nekdo neco podobneho resil, poradite prosim?
> Diky,
> David
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.384 / Virus Database: 216 - Release Date: 21/08/2002
>
>
---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.384 / Virová báze: 216 - datum vydání: 21.8.2002
Odpovedá: Ales Vasicek
5. 9. 2002 10:50
Select * From Table1 Where (Cena = 100) OR (Cena = 200)
^^
A.
> -----Original Message-----
> From: David Michal [mailto:david.michal@www-bv.com]
>
> Select * From Table1 Where (Cena = 100) and (Cena = 200)
>
> Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak definovat
> podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> zaznamy jeden by
> mel cena=100 a druhy cena=200 vratil by mi select oba dva. Pokud vsak
> napriklad druhy zaznam bude mit cena=300, pak mi select
> nevrati ani jeden
Odpovedá: Slavek Rydval
5. 9. 2002 13:05
Mno, jestli jsem to pochopil dobre, tak by slo neco takovehoto:
select distinct *
from table1
where exists (select * from table1 where cena = 100)
and exists (select * from table1 where cena = 200)
and not exists (select *
from table1
where cena <> 100
and cena <> 200)
Ovsem index nad sloupcem cena velmi doporuceny.
Slavek
> Co to zkusit takto:
>
> Select * From Table1 Where (Cena = 100) OR (Cena = 200)
>
>
> Martin Ben
>
> > -----Original Message-----
> > From: David Michal [mailto:david.michal@www-bv.com]
> >
> > Select * From Table1 Where (Cena = 100) and (Cena = 200)
> >
> > Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak
> > definovat podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> > zaznamy jeden by mel cena=100 a druhy cena=200 vratil by mi select
> > oba dva. Pokud vsak napriklad druhy zaznam bude mit cena=300, pak mi
> > select nevrati ani jeden zaznam. Ale jak to zapsat?
>
>
--------------------------------------------------------
http://atrey.karlin.mff.cuni.cz/~rk
Pozor, nyni pouze http://195.113.18.111/~rk/index.shtml
--------------------------------------------------------
Udelejte to blbuvzdorne a zitra nekdo vymysli jeste vetsiho blba.
Odpovedá: Slavek Rydval
5. 9. 2002 8:52
Ahoj,
to pak dostanes jednak vzhledem k existum jsou zbytecne podminky
(Cena = 100) OR (Cena = 200) a take dostanes vysledek i v pripade, ze
je v tabuli napr:
100
100
200
300
coz autor nechce. Pokud chapu puvodni pozadavek, tak chce vysledek
pouze v pripade, ze v tabuli jsou pouze hodnoty 100 A 200. (spravny
select viz jiny mail).
Slavek
On 4 Sep 2002 at 21:14, Martin Cajbik wrote:
> Sice nechapem naco by to mohlo sluzit ale dalo by sa to napisat takto
>
> Select * From Table1 Where ((Cena = 100) OR (Cena = 200))
> AND EXISTS(SELECT * FROM Table1 Where Cena = 100)
> AND EXISTS(SELECT * FROM Table1 Where Cena = 200)
>
> MarCaNT (marcant@sct.sk)
>
>
> > Pomoci tohoto selectu dostanu vysledek 1 radku i v pripade ze napr.
> nenajde
> > zadny row s cena=200. Ale ja potrebuji aby mi vratil vysledek pouze
> > v pripade, za najde rows jak s cena=100 tak s cena=200. David
> >
> >
> > Co to zkusit takto:
> >
> > Select * From Table1 Where (Cena = 100) OR (Cena = 200)
> >
> >
> > Martin Ben
> >
>
>
>
--------------------------------------------------------
http://atrey.karlin.mff.cuni.cz/~rk
Pozor, nyni pouze http://195.113.18.111/~rk/index.shtml
--------------------------------------------------------
Udelejte to blbuvzdorne a zitra nekdo vymysli jeste vetsiho blba.
Odpovedá: Ben, Martin (CAP, GCF)
6. 9. 2002 0:38
Premyslel jsem o tom taky, ale nechapu k cemu to muze byt dobre
Martin Ben
> -----Original Message-----
> From: Slavek Rydval [mailto:rk@atrey.karlin.mff.cuni.cz]
>
> Mno, jestli jsem to pochopil dobre, tak by slo neco takovehoto:
>
> select distinct *
> from table1
> where exists (select * from table1 where cena = 100)
> and exists (select * from table1 where cena = 200)
> and not exists (select *
> from table1
> where cena <> 100
> and cena <> 200)
>
> Ovsem index nad sloupcem cena velmi doporuceny.
Odpovedá: David Michal
5. 9. 2002 22:25
No k necemu dobre to je.
Zde jsem napsal priklad s cenou jelikoz mi to prislo jednodusi nezli
popisovat skutecnou situaci kterou jsem resil. Ve skutecnosti chci takto
porovnavat datumy. A to u tabulky kde je hodne dulezite zda pokud je vyplnen
napriklad zaznam datum1 = 1.9.2002, tak musi byt v jinem row vyplnen zaznam
datum2 = 1.10.2002. Takze proto jsem resil jak vyresit operator and mezi
rows a nemohl jsem pouzit operator or.
Diky,
David
Premyslel jsem o tom taky, ale nechapu k cemu to muze byt dobre
Martin Ben
> -----Original Message-----
> From: Slavek Rydval [mailto:rk@atrey.karlin.mff.cuni.cz]
>
> Mno, jestli jsem to pochopil dobre, tak by slo neco takovehoto:
>
> select distinct *
> from table1
> where exists (select * from table1 where cena = 100)
> and exists (select * from table1 where cena = 200)
> and not exists (select *
> from table1
> where cena <> 100
> and cena <> 200)
>
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.385 / Virus Database: 217 - Release Date: 04/09/2002
Odpovedá: Käss, Pavel
5. 9. 2002 14:18
ty prvni dva selecty jsou zbytecny: staci
select * from table1
where ((cena = 100) or (cena = 200))
and not exists (select * from table1 where cena <> 100 and cena <> 200);
> -----Original Message-----
> select distinct *
> from table1
> where exists (select * from table1 where cena = 100)
> and exists (select * from table1 where cena = 200)
> and not exists (select *
> from table1
> where cena <> 100
> and cena <> 200)
>
> Ovsem index nad sloupcem cena velmi doporuceny.
> > > Select * From Table1 Where (Cena = 100) and (Cena = 200)
> > >
> > > Takto to samozrejme nevrati nic. Ale nemohu prijit na to jak
> > > definovat podobne dotazy. Tzn. v tomto pripade by v Table1 byly dva
> > > zaznamy jeden by mel cena=100 a druhy cena=200 vratil by mi select
> > > oba dva. Pokud vsak napriklad druhy zaznam bude mit cena=300, pak mi
> > > select nevrati ani jeden zaznam. Ale jak to zapsat?
>
Odpovedá: Slavek Rydval
8. 9. 2002 2:32
Ahoj,
> On 5 Sep 2002 at 15:13, Käss, Pavel wrote:
> ty prvni dva selecty jsou zbytecny: staci
*****to samozrejme neni pravda, protoze tazatel chtel, aby se vybraly
rakdy pouze v pripade, ze se tam vyskytuje cena = 100 A SOUCASNE
(nikoliv nebo) cena = 200...
Slavek
> select * from table1
> where ((cena = 100) or (cena = 200))
> and not exists (select * from table1 where cena <> 100 and cena <>
> 200);
> > select distinct *
> > from table1
> > where exists (select * from table1 where cena = 100)
> > and exists (select * from table1 where cena = 200)
> > and not exists (select *
> > from table1
> > where cena <> 100
> > and cena <> 200)
> >
> > Ovsem index nad sloupcem cena velmi doporuceny.
--------------------------------------------------------
http://atrey.karlin.mff.cuni.cz/~rk
Pozor, nyni pouze http://195.113.18.111/~rk/index.shtml
--------------------------------------------------------
Udelejte to blbuvzdorne a zitra nekdo vymysli jeste vetsiho blba.
Odpovedá: Jan Krízek
8. 9. 2002 1:05
Takze jestli to chapu, tak chces z jedne tabulky dvojici kde jeden datum
je 1.9.2002 a druhy 1.10.2002.
Pak bych volil spojeni teto tabulky sama se sebou:
SELECT * FROM TABLE T1, TABLE T2 WHERE T1.datum = '1.9.2002' AND
T2.datum = '1.10.2002';
Takhle ti to vrati v kazdem radku dvojici, kde prvni ma prvni datum a v
druhe to druhe datum. Ale pozor vrati to vsechny takove dvojice! Pak
zalezi jestli je v te tve tabulce datum jedinecne, nebo mas dalsi
polozku podle ktere poznas, ktere datumy patri k sobe. Pak bys tam
pridal jeste spojeni podle teto polozky.
Urcite by pak slo napsat i dotaz ve smyslu:
SELECT * FROM TABLE T1, TABLE T2 WHERE PlusMesic(T1.datum) = T2.datum;
ktery by ti vratil vsechny dvojice, ktere splnuji tvoji podminku pro
sparovani. To PlusMesic ber s rezervou - mam tim na mysli nejakou funkci
ktera ti k datumu pricte ten mesic (ci co potrebujes), to vsak zalezi na
tve databazi.
Honza +
> -----Original Message-----
> From: David Michal [mailto:david.michal@www-bv.com]
> Sent: Thursday, September 05, 2002 2:21 PM
> To: delphi-l@clexpert.cz
> Subject: RE: Sql command pro vyber pomoci AND.
>
>
> No k necemu dobre to je.
> Zde jsem napsal priklad s cenou jelikoz mi to prislo jednodusi nezli
> popisovat skutecnou situaci kterou jsem resil. Ve skutecnosti
> chci takto
> porovnavat datumy. A to u tabulky kde je hodne dulezite zda
> pokud je vyplnen
> napriklad zaznam datum1 = 1.9.2002, tak musi byt v jinem row
> vyplnen zaznam
> datum2 = 1.10.2002. Takze proto jsem resil jak vyresit
> operator and mezi
> rows a nemohl jsem pouzit operator or.
> Diky,
> David